#ifndef ADMINISTRADOR_ESTACIONAMIENTO_H_
#define ADMINISTRADOR_ESTACIONAMIENTO_H_

#include <iostream>
#include <signal.h>
#include <stdlib.h>
#include <vector>
#include "Seniales/SignalHandler.h"
#include "Constantes.h"
#include "Colas/Cola.h"
#include "Colas/Mensajes.h"
#include "Log.h"
#include "Terminador.h"
#include "Estacionamiento.h"

using namespace std;

class AdministradorEstacionamiento : public EventHandler {

private:

	bool administrando;
	bool entradasCerradas;
	int cantidadEstacionamientos;
	int cantidadLugares;
	int costoHora;
	vector<Cola<MensajeTicket> > colasEstacionamientos;
	Cola<MensajeTicket> colaAdministrador;
	vector<vector<bool> > lugares;
	vector<pid_t> pidsEstacionamientos;
	vector<int> cantidadAutos;
	vector<int> montoFacturado;
	vector<int> cantidadTotalAutos;
	
	void leerColaAdministrador();
	int buscarLugarEstacionamiento(int);
	void liberarLugarEstacionamiento(Ticket);
	bool estacionamientoVacio(int);
	void verificarCierreEstacionamientos();
	int generarEstacionamientos();
	void avisarEstacionamientosCerrarEntradas();
	void avisarEstacionamientoCerrarSalidas(int);
	void verificarEstacionamientosVacios();
	void enviarCantidadAutos(int);
	void enviarMontoFacturado(int);

public:

	AdministradorEstacionamiento(int, int, int);
	virtual ~AdministradorEstacionamiento();
	int inicializar();
	void destruir();
	void administrarEstacionamientos();
	int handleSignal(int signum);
	void imprimirEstadisticas();

};

#endif /*CONSULTA_H_*/
